package com.shlh.saas.service.customs;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.shlh.saas.entity.customs.CustomTrade;

import java.time.LocalDate;
import java.util.List;

/**
 * 海关贸易数据服务接口
 */
public interface CustomTradeService extends IService<CustomTrade> {
    
    /**
     * 根据产品关键词查询海关贸易数据
     * @param productKeyword 产品关键词
     * @return 海关贸易数据列表
     */
    List<CustomTrade> findByProductKeyword(String productKeyword);
    
    /**
     * 根据海关编码查询海关贸易数据
     * @param hsCode 海关编码
     * @return 海关贸易数据列表
     */
    List<CustomTrade> findByHsCode(String hsCode);
    
    /**
     * 根据提单号查询海关贸易数据
     * @param billOfLadingNumber 提单号
     * @return 海关贸易数据
     */
    CustomTrade findByBillOfLadingNumber(String billOfLadingNumber);
    
    /**
     * 根据供应商查询海关贸易数据
     * @param supplier 供应商
     * @return 海关贸易数据列表
     */
    List<CustomTrade> findBySupplier(String supplier);
    
    /**
     * 根据采购商查询海关贸易数据
     * @param purchaser 采购商
     * @return 海关贸易数据列表
     */
    List<CustomTrade> findByPurchaser(String purchaser);
    
    /**
     * 根据多条件分页查询海关贸易数据
     * @param productKeyword 产品关键词
     * @param hsCode 海关编码
     * @param originCountry 原产国
     * @param destinationCountry 目的国
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @param pageNum 页码
     * @param pageSize 每页大小
     * @return 分页结果
     */
    Page<CustomTrade> searchByConditions(
        String productKeyword,
        String hsCode,
        String originCountry,
        String destinationCountry,
        LocalDate startDate,
        LocalDate endDate,
        int pageNum,
        int pageSize
    );
    
    /**
     * 获取所有产品关键词
     * @return 产品关键词列表
     */
    List<String> getAllProductKeywords();
    
    /**
     * 获取所有海关编码
     * @return 海关编码列表
     */
    List<String> getAllHsCodes();
    
    /**
     * 根据条件计算符合条件的记录总数
     * @param productKeyword 产品关键词
     * @param hsCode 海关编码
     * @param originCountry 原产国
     * @param destinationCountry 目的国
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 记录总数
     */
    long countByConditions(
        String productKeyword,
        String hsCode,
        String originCountry,
        String destinationCountry,
        LocalDate startDate,
        LocalDate endDate
    );
    
    /**
     * 根据条件查询海关贸易数据用于导出
     * @param productKeyword 产品关键词
     * @param hsCode 海关编码
     * @param originCountry 原产国
     * @param destinationCountry 目的国
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @param limit 限制查询数量
     * @return 海关贸易数据列表
     */
    List<CustomTrade> findByConditionsForExport(
        String productKeyword,
        String hsCode,
        String originCountry,
        String destinationCountry,
        LocalDate startDate,
        LocalDate endDate,
        Integer limit
    );
} 